<!doctype html><html lang dir=ltr><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>【第7周笔记】文件和数据格式化 | Python | Hui.Ke - Blog</title><meta name=generator content="Hugo Eureka 0.9.3"><link rel=stylesheet href=https://b.hui.ke/css/eureka.min.9cec6350e37e534b0338fa9a085bf06855de3b0f2dcf857e792e5e97b07ea905d4d5513db554cbc26a9c3da622bae92d.css><script defer src=https://b.hui.ke/js/eureka.min.fa9a6bf6d7a50bb635b4cca7d2ba5cf3dfb095ae3798773f1328f7950028b48c17d06276594e1b5f244a25a6c969a705.js></script>
<link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload href="https://fonts.googleapis.com/css2?family=Lora:wght@400;600;700&family=Noto+Serif+SC:wght@400;600;700&display=swap" as=style onload='this.onload=null,this.rel="stylesheet"'><link rel=stylesheet href=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/styles/vs.min.css media=print onload='this.media="all",this.onload=null' crossorigin><script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/highlight.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/bash.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/ini.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/json.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/php.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/python.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/shell.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/sql.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/x86asm.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/xml.min.js crossorigin></script>
<link rel=stylesheet href=https://b.hui.ke/css/highlightjs.min.2958991528e43eb6fc9b8c4f2b8e052f79c4010718e1d1e888a777620e9ee63021c2c57ec7417a3108019bb8c41943e6.css media=print onload='this.media="all",this.onload=null'><script defer type=text/javascript src=https://lib.baomitu.com/font-awesome/6.1.1/js/all.min.js></script>
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css integrity=sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ media=print onload='this.media="all",this.onload=null' crossorigin><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.js integrity=sha384-VQ8d8WVFw0yHhCk5E8I86oOhv48xLpnDZx5T9GogA/Y84DcCKWXDmSDfn13bzFZY crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin></script>
<script>document.addEventListener("DOMContentLoaded",function(){renderMathInElement(document.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}]})})</script><script defer src=https://cdn.jsdelivr.net/npm/mermaid@8.14.0/dist/mermaid.min.js integrity=sha384-atOyb0FxAgN9LyAc6PEf9BjgwLISyansgdH8/VXQH8p2o5vfrRgmGIJ2Sg22L0A0 crossorigin></script>
<link rel=icon type=image/png sizes=32x32 href=https://b.hui.ke/icon_hub7ca0b5404c6d576559b2bd22c64b0e5_2009_32x32_fill_box_center_3.png><link rel=apple-touch-icon sizes=180x180 href=https://b.hui.ke/icon_hub7ca0b5404c6d576559b2bd22c64b0e5_2009_180x180_fill_box_center_3.png><meta name=description content="  课程笔记和选择题"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Docs","item":"https://b.hui.ke/docs/"},{"@type":"ListItem","position":2,"name":"Python","item":"https://b.hui.ke/docs/python/"},{"@type":"ListItem","position":3,"name":"【第7周笔记】文件和数据格式化","item":"https://b.hui.ke/docs/python/7/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"Article","mainEntityOfPage":{"@type":"WebPage","@id":"https://b.hui.ke/docs/python/7/"},"headline":"【第7周笔记】文件和数据格式化 | Python | Hui.Ke - Blog","datePublished":"2022-05-03T11:59:19+08:00","dateModified":"2022-05-03T11:59:19+08:00","wordCount":4536,"author":{"@type":"Person","name":"Hui.Ke"},"publisher":{"@type":"Person","name":"Hui.Ke","logo":{"@type":"ImageObject","url":"https://b.hui.ke/icon.png"}},"description":"\u003cp\u003e  课程笔记和选择题\u003c\/p\u003e"}</script><meta property="og:title" content="【第7周笔记】文件和数据格式化 | Python | Hui.Ke - Blog"><meta property="og:type" content="article"><meta property="og:image" content="https://b.hui.ke/icon.png"><meta property="og:url" content="https://b.hui.ke/docs/python/7/"><meta property="og:description" content="  课程笔记和选择题"><meta property="og:site_name" content="Hui.Ke - Blog"><meta property="article:published_time" content="2022-05-03T11:59:19+08:00"><meta property="article:modified_time" content="2022-05-03T11:59:19+08:00"><meta property="article:section" content="docs"><meta property="article:tag" content="文件"><meta property="article:tag" content="数据"><meta property="article:tag" content="wordcloud"><meta property="og:see_also" content="https://b.hui.ke/docs/python/20/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/10/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/19/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/9/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/18/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/8/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/17/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/16/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/6/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/15/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/5/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/14/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/4/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/13/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/3/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/12/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/2/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/11/"><meta property="og:see_also" content="https://b.hui.ke/docs/python/1/"><script>!function(e){"use strict";!function(){var i,s=window,o=document,a=e,c="".concat("https:"===o.location.protocol?"https://":"http://","sdk.51.la/js-sdk-pro.min.js"),n=o.createElement("script"),r=o.getElementsByTagName("script")[0];n.type="text/javascript",n.setAttribute("charset","UTF-8"),n.async=!0,n.src=c,n.id="LA_COLLECT",a.d=n,i=function(){s.LA.ids.push(a)},s.LA?s.LA.ids&&i():(s.LA=e,s.LA.ids=[],i()),r.parentNode.insertBefore(n,r)}()}({id:"Jgb8aUbG5e3rqhrs",ck:"Jgb8aUbG5e3rqhrs",autoTrack:!0,hashMode:!0})</script><body class="flex min-h-screen flex-col"><header class="min-h-16 pl-scrollbar bg-secondary-bg fixed z-50 flex w-full items-center shadow-sm"><div class="mx-auto w-full max-w-screen-xl"><script>let storageColorScheme=localStorage.getItem("lightDarkMode");((storageColorScheme=="Auto"||storageColorScheme==null)&&window.matchMedia("(prefers-color-scheme: dark)").matches||storageColorScheme=="Dark")&&document.getElementsByTagName("html")[0].classList.add("dark")</script><nav class="flex items-center justify-between flex-wrap px-4 py-4 md:py-0"><a href=/ class="me-6 text-primary-text text-xl font-bold">Hui.Ke - Blog</a>
<button id=navbar-btn class="md:hidden flex items-center px-3 py-2" aria-label="Open Navbar">
<i class="fas fa-bars"></i></button><div id=target class="hidden block md:flex md:grow md:justify-between md:items-center w-full md:w-auto text-primary-text z-20"><div class="md:flex md:h-16 text-sm md:grow pb-4 md:pb-0 border-b md:border-b-0"><a href=/posts/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Posts</a>
<a href=/docs/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 selected-menu-item me-4">Docs</a>
<a href=/categories/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Categories</a>
<a href=/series/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Series</a>
<a href=/tags/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Tags</a>
<a href=/love/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Love</a>
<a href=/about/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">About</a></div><div class=flex><div class="relative pt-4 md:pt-0"><div class="cursor-pointer hover:text-eureka" id=lightDarkMode><i class="fas fa-adjust"></i></div><div class="fixed hidden inset-0 opacity-0 h-full w-full cursor-default z-30" id=is-open></div><div class="absolute flex flex-col start-0 md:start-auto end-auto md:end-0 hidden bg-secondary-bg w-48 rounded py-2 border border-tertiary-bg cursor-pointer z-40" id=lightDarkOptions><span class="px-4 py-1 hover:text-eureka" name=Light>Light</span>
<span class="px-4 py-1 hover:text-eureka" name=Dark>Dark</span>
<span class="px-4 py-1 hover:text-eureka" name=Auto>Auto</span></div></div></div></div><div class="fixed hidden inset-0 opacity-0 h-full w-full cursor-default z-0" id=is-open-mobile></div></nav><script>let element=document.getElementById("lightDarkMode");storageColorScheme==null||storageColorScheme=="Auto"?document.addEventListener("DOMContentLoaded",()=>{window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",switchDarkMode)}):storageColorScheme=="Light"?(element.firstElementChild.classList.remove("fa-adjust"),element.firstElementChild.setAttribute("data-icon","sun"),element.firstElementChild.classList.add("fa-sun")):storageColorScheme=="Dark"&&(element.firstElementChild.classList.remove("fa-adjust"),element.firstElementChild.setAttribute("data-icon","moon"),element.firstElementChild.classList.add("fa-moon")),document.addEventListener("DOMContentLoaded",()=>{getcolorscheme(),switchBurger()})</script></div></header><main class="grow pt-16"><div class=pl-scrollbar><div class="mx-auto w-full max-w-screen-xl lg:px-4 xl:px-8"><div class=lg:pt-12><div class="flex flex-col md:flex-row bg-secondary-bg rounded"><div class="md:w-1/4 lg:w-1/5 border-e"><div class="sticky top-16 pt-6"><div id=sidebar-title class="md:hidden mx-4 px-2 pt-4 pb-2 md:border-b text-tertiary-text md:text-primary-text"><span class=font-semibold>Table of Contents</span>
<i class='fas fa-caret-right ms-1'></i></div><div id=sidebar-toc class="hidden md:block overflow-y-auto mx-6 md:mx-0 pe-6 pt-2 md:max-h-doc-sidebar bg-primary-bg md:bg-transparent"><div class="flex flex-wrap ms-4 -me-2 p-2 bg-secondary-bg md:bg-primary-bg rounded"><a class=hover:text-eureka href=https://b.hui.ke/docs/python/>Python</a></div><ul class=ps-6><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/20/>期末测验</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/10/>【第9+周笔记】全课程总结与学习展望</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/19/>【第9周程序】计算生态纵览</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/9/>【第9周笔记】计算生态纵览</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/18/>【第8周程序】程序设计方法学</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/8/>【第8周笔记】程序设计方法学</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/17/>【第7周程序】文件和数据格式化</a></div></li><li class=py-2><div><a class="text-eureka hover:text-eureka" href=https://b.hui.ke/docs/python/7/>【第7周笔记】文件和数据格式化</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/16/>【第6周程序】组合数据类型</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/6/>【第6周笔记】组合数据类型</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/15/>【第5周程序】函数和代码复用</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/5/>【第5周笔记】函数和代码复用</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/14/>【第4周程序】程序的控制结构</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/4/>【第4周笔记】程序的控制结构</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/13/>【第3周程序】基本数据类型</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/3/>【第3周笔记】基本数据类型</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/12/>【第2周程序】Python 基本图形绘制</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/2/>【第2周笔记】Python 基本图形绘制</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/11/>【第1周程序】Python 基本语法元素</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/python/1/>【第1周笔记】Python 基本语法元素</a></div></li></ul></div></div></div><div class="w-full md:w-3/4 lg:w-4/5 pb-8 pt-2 md:pt-8"><div class=flex><div class="w-full lg:w-3/4 px-6"><article class=prose><h1 class=mb-4>【第7周笔记】文件和数据格式化</h1><div class="text-tertiary-text not-prose mt-2 flex flex-row flex-wrap items-center"><div class="me-6 my-2"><i class="fas fa-calendar me-1"></i>
<span>2022-05-03</span></div><div class="me-6 my-2"><i class="fa-solid fa-pen-to-square me-1"></i>
<span>2022-05-03</span></div><div class="me-6 my-2"><i class="fas fa-clock me-1"></i>
<span>10 min read</span></div><div class="me-6 my-2"><i class="fas fa-folder me-1"></i>
<a href=https://b.hui.ke/categories/it/ class=hover:text-eureka>IT</a></div><div class="me-6 my-2"><i class="fas fa-th-list me-1"></i>
<a href=https://b.hui.ke/series/python/ class=hover:text-eureka>Python</a></div><div class="me-6 my-2"><i class="fa-solid fa-eye me-1"></i>
<span id=busuanzi_value_page_pv><i class="fa fa-spinner fa-spin"></i></span> Hits</div></div><p>  课程笔记和选择题</p><h2 id=notes>notes</h2><h3 id=文件的理解>文件的理解</h3><p>  文件是数据的抽象和集合</p><p>  文件是存储在辅助存储器上的数据序列</p><p>  文件是数据存储的一种形式</p><p>  文件展现形态：文本文件和二进制文件</p><h3 id=文本文件-vs-二进制文件>文本文件 vs. 二进制文件</h3><p>  文本文件和二进制文件只是文件的展示方式</p><p>  本质上，所有文件都是二进制形式存储</p><p>  形式上，所有文件采用两种方式展示</p><ol><li>文本文件<ul><li>由<strong>单一特定编码</strong>组成的文件，如 UTF-8 编码</li><li>由于存在编码，也被看成是存储着的长字符串</li><li>适用于例如：.txt 文件、.py 文件等</li></ul></li><li>二进制文件<ul><li>直接由比特 0 和 1 组成，<strong>没有统一字符编码</strong></li><li>一般存在二进制 0 和 1 的组织结构，即文件格式</li><li>适用于例如：.png 文件、.avi 文件等</li></ul></li></ol><p>  &ldquo;中国是个伟大的国家!&rdquo;</p><ol><li>文本形式：中国是个伟大的国家!</li><li>二进制形式：b&rsquo;\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'</li></ol><p>f.txt 文件保存: &ldquo;中国是个伟大的国家!&rdquo;</p><pre><code class=language-python>tf = open(&quot;f.txt&quot;, &quot;rt&quot;)     # 文本形式打开文件
print(tf.readline())     # 输出：中国是个伟大的国家!
tf.close()

bf = open(&quot;f.txt&quot;, &quot;rb&quot;)     # 二进制形式打开文件
print(bf.readline())     # 输出：b'\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'
bf.close()
</code></pre><h3 id=文件的打开关闭>文件的打开关闭</h3><p>  文件处理的步骤: 打开-操作-关闭</p><div class=mermaid align=center>graph LR;
A[文件的存储状态] -->|"a=open(,)"| B[文件的占用状态]
B -->|"a.close()"| A</div><pre><code class=language-python># 读文件
a.read(size)
a.readline(size)
a.readlines(hint)

# 写文件
a.write(s)
a.writelines(lines)
a.seek(offset)

&lt;变量名&gt; = open(&lt;文件名&gt;, &lt;打开模式&gt;)     # 文件的打开
&lt;变量名&gt;.close()     # 文件的关闭
</code></pre><table><thead><tr><th style=text-align:center>文件的打开模式</th><th style=text-align:left>描述</th></tr></thead><tbody><tr><td style=text-align:center>&lsquo;r&rsquo;</td><td style=text-align:left>只读模式，默认值，如果文件不存在，返回 FileNotFoundError</td></tr><tr><td style=text-align:center>&lsquo;w&rsquo;</td><td style=text-align:left>覆盖写模式，文件不存在则创建，存在则完全覆盖</td></tr><tr><td style=text-align:center>&lsquo;x&rsquo;</td><td style=text-align:left>创建写模式，文件不存在则创建，存在则返回 FileExistsError</td></tr><tr><td style=text-align:center>&lsquo;a&rsquo;</td><td style=text-align:left>追加写模式，文件不存在则创建，存在则在文件最后追加内容</td></tr><tr><td style=text-align:center>&lsquo;b&rsquo;</td><td style=text-align:left>二进制文件模式</td></tr><tr><td style=text-align:center>&rsquo;t'</td><td style=text-align:left>文本文件模式，默认值</td></tr><tr><td style=text-align:center>&lsquo;+&rsquo;</td><td style=text-align:left>与 r/w/x/a 一同使用，在原功能基础上增加同时读写功能</td></tr></tbody></table><pre><code class=language-python>f = open(&quot;f.txt&quot;)     # 文本形式、只读模式、默认值
f = open(&quot;f.txt&quot;, &quot;rt&quot;)     # 文本形式、只读模式、同默认值
f = open(&quot;f.txt&quot;, &quot;w&quot;)     # 文本形式、覆盖写模式
f = open(&quot;f.txt&quot;, &quot;a+&quot;)     # 文本形式、追加写模式+ 读文件
f = open(&quot;f.txt&quot;, &quot;x&quot;)     # 文本形式、创建写模式
f = open(&quot;f.txt&quot;, &quot;b&quot;)     # 二进制形式、只读模式
f = open(&quot;f.txt&quot;, &quot;wb&quot;)     # 二进制形式、覆盖写模式
</code></pre><h3 id=文件内容的读取>文件内容的读取</h3><table><thead><tr><th style=text-align:left>操作方法</th><th style=text-align:left>描述</th><th style=text-align:left>举例</th><th style=text-align:left>输出</th></tr></thead><tbody><tr><td style=text-align:left><f>.read(size=-1)</td><td style=text-align:left>读入全部内容，如果给出参数，读入前 size 长度</td><td style=text-align:left>s = f.read(2)</td><td style=text-align:left>中国</td></tr><tr><td style=text-align:left><f>.readline(size=-1)</td><td style=text-align:left>读入一行内容，如果给出参数，读入该行前 size 长度</td><td style=text-align:left>s = f.readline()</td><td style=text-align:left>中国是一个伟大的国家！</td></tr><tr><td style=text-align:left><f>.readlines(hint=-1)</td><td style=text-align:left>读入文件所有行，以每行为元素形成列表，如果给出参数，读入前 hint 行</td><td style=text-align:left>s = f.readlines()</td><td style=text-align:left>[&lsquo;中国是一个伟大的国家！&rsquo;]</td></tr></tbody></table><ol><li>文件的全文本操作：遍历全文本<ol><li>一次读入，统一处理<pre><code class=language-python>fname = input(&quot;请输入要打开的文件名称:&quot;)
fo = open(fname,&quot;r&quot;)
txt = fo.read()     # 对全文 txt 进行处理
fo.close()
</code></pre></li><li>按数量读入，逐步处理<pre><code class=language-python>fname = input(&quot;请输入要打开的文件名称:&quot;)
fo = open(fname,&quot;r&quot;)
txt = fo.read(2)
while txt != &quot;&quot;:     # 对 txt 进行处理
    txt = fo.read(2)
fo.close()
</code></pre></li></ol></li><li>文件的逐行操作：逐行遍历文件<ol><li>一次读入，分行处理<pre><code class=language-python>fname = input(&quot;请输入要打开的文件名称:&quot;)
fo = open(fname,&quot;r&quot;)
for line in fo.readlines():
    print(line)
fo.close()
</code></pre></li><li>分行读入，逐行处理<pre><code class=language-python>fname = input(&quot;请输入要打开的文件名称:&quot;)
fo = open(fname,&quot;r&quot;)
for line in fo:
    print(line)
fo.close()
</code></pre></li></ol></li></ol><h3 id=数据的文件写入>数据的文件写入</h3><table><thead><tr><th style=text-align:left>操作方法</th><th style=text-align:left>描述</th><th style=text-align:left>举例</th></tr></thead><tbody><tr><td style=text-align:left><f>.write(s)</td><td style=text-align:left>向文件写入一个字符串或字节流</td><td style=text-align:left>f.write(&ldquo;中国是一个伟大的国家!&rdquo;)</td></tr><tr><td style=text-align:left><f>.writelines(lines)</td><td style=text-align:left>将一个元素全为字符串的列表写入文件</td><td style=text-align:left>ls = [&ldquo;中国&rdquo;, &ldquo;法国&rdquo;, &ldquo;美国&rdquo;] f.writelines(ls)</td></tr><tr><td style=text-align:left><f>.seek(offset)</td><td style=text-align:left>改变当前文件操作指针的位置，offset 含义如下：0 – 文件开头； 1 – 当前位置； 2 – 文件结尾</td><td style=text-align:left>f.seek(0) # 回到文件开头</td></tr></tbody></table><pre><code class=language-python>fo = open(&quot;output.txt&quot;,&quot;w+&quot;)
ls = [&quot;中国&quot;, &quot;法国&quot;, &quot;美国&quot;]
fo.writelines(ls)     # 写入一个字符串列表
for line in fo:
    print(line)     #（没有任何输出）
fo.close()

fo = open(&quot;output.txt&quot;,&quot;w+&quot;)
ls = [&quot;中国&quot;, &quot;法国&quot;, &quot;美国&quot;]
fo.writelines(ls)
fo.seek(0)     # 写入一个字符串列表
for line in fo:
    print(line)     # 输出：中国法国美国
fo.close()
</code></pre><h3 id=数据组织的维度>数据组织的维度</h3><ol><li>一维数据<ul><li>由对等关系的有序或无序数据构成，采用线性方式组织</li><li>对应列表、数组和集合等概念</li></ul></li><li>二维数据<ul><li>由多个一维数据构成，是一维数据的组合形式</li><li>表格是典型的二维数据，其中，表头是二维数据的一部分</li></ul></li><li>多维数据：由一维或二维数据在新维度上扩展形成</li><li>高维数据：仅利用最基本的二元关系展示数据间的复杂结构</li></ol><pre><code class=language-python>{
    &quot;firstName&quot; : &quot;Tian&quot; ,
    &quot;lastName&quot; : &quot;Song&quot; ,
    &quot;address&quot; : {
                &quot;streetAddr&quot; : &quot;中关村南大街5号&quot; ,
                &quot;city&quot; : &quot;北京市&quot; ,
                &quot;zipcode&quot; : &quot;100081&quot;
                } ,
    &quot;professional&quot; : [&quot;Computer Networking&quot; , &quot;Security&quot;]
}
</code></pre><p>  数据的操作周期：存储 &lt;-> 表示 &lt;-> 操作</p><h3 id=一维数据的格式化和处理>一维数据的格式化和处理</h3><p>  一维数据的表示</p><ol><li>如果数据间有序：使用列表类型：ls = [3.1398, 3.1349, 3.1376]<ul><li>列表类型可以表达一维有序数据</li><li>for 循环可以遍历数据，进而对每个数据进行处理</li></ul></li><li>如果数据间无序：使用集合类型：st = {3.1398, 3.1349, 3.1376}<ul><li>集合类型可以表达一维无序数据</li><li>for 循环可以遍历数据，进而对每个数据进行处理</li></ul></li></ol><p>  一维数据的存储</p><ol><li>空格分隔：中国 美国 日本 德国 法国 英国 意大利<ul><li>使用一个或多个空格分隔进行存储，不换行</li><li>缺点：数据中不能存在空格</li></ul></li><li>逗号分隔：中国,美国,日本,德国,法国,英国,意大利<ul><li>使用英文半角逗号分隔数据进行存储，不换行</li><li>缺点：数据中不能有英文逗号</li></ul></li><li>其他方式：中国$美国$日本$德国$法国$英国$意大利<ul><li>使用其他符号或符号组合分隔，建议采用特殊符号</li><li>缺点：需要根据数据特点定义，通用性较差</li></ul></li></ol><p>  一维数据的处理</p><p>  存储 &lt;-> 表示</p><p>  将存储的数据读入程序</p><p>  将程序表示的数据写入文件</p><p>  一维数据的读入处理</p><pre><code class=language-python>txt = open(fname).read()
ls = txt.split()     # 从空格分隔的文件中读入数据
f.close()

txt = open(fname).read()
ls = txt.split(&quot;$&quot;)     # 从特殊符号分隔的文件中读入数据
f.close()
</code></pre><p>  一维数据的写入处理</p><pre><code class=language-python>ls = ['中国', '美国', '日本']
f = open(fname, 'w')
f.write(' '.join(ls))     # 采用空格分隔方式将数据写入文件
f.close()

ls = ['中国', '美国', '日本']
f = open(fname, 'w')
f.write('$'.join(ls))     # 采用特殊分隔方式将数据写入文件
f.close()
</code></pre><h3 id=二维数据的格式化和处理>二维数据的格式化和处理</h3><h4 id=二维数据的表示>二维数据的表示</h4><p>  列表类型可以表达二维数据</p><p>  使用二维列表</p><p>  使用两层 for 循环遍历每个元素</p><p>  外层列表中每个元素可以对应一行，也可以对应一列</p><p>  数据维度是数据的组织形式</p><ol><li>一维数据：列表和集合类型<ol><li>[3.1398, 3.1349, 3.1376] 数据间有序</li><li>{3.1398, 3.1349, 3.1376} 数据间无序</li></ol></li><li>二维数据：列表类型<pre><code class=language-python>[ [3.1398, 3.1349, 3.1376], 
[3.1413, 3.1404, 3.1401] ]
</code></pre></li></ol><h4 id=csv-数据存储格式>CSV 数据存储格式</h4><p>  CSV：Comma-Separated Values</p><p>  国际通用的一二维数据存储格式，一般 .csv 扩展名</p><p>  每行一个一维数据，采用逗号分隔，无空行</p><p>  Excel 和一般编辑软件都可以读入或另存为 csv 文件</p><p>  如果某个元素缺失，逗号仍要保留</p><p>  二维数据的表头可以作为数据存储，也可以另行存储</p><p>  逗号为英文半角逗号，逗号与数据之间无额外空格</p><h4 id=二维数据的存储>二维数据的存储</h4><p>  按行存或者按列存都可以，具体由程序决定</p><p>  一般索引习惯：ls[row][column]，先行后列</p><p>  根据一般习惯，外层列表每个元素是一行，按行存</p><h4 id=二维数据的处理>二维数据的处理</h4><pre><code class=language-python>fo = open(fname)
ls = []
for line in fo:
    line = line.replace(&quot;\n&quot;,&quot;&quot;)
    ls.append(line.split(&quot;,&quot;))     # 从 CSV 格式的文件中读入数据
fo.close()

ls = [[], [], []] #二维列表
f = open(fname, 'w')
for item in ls:
f.write(','.join(item) + '\n')     # 将数据写入 CSV 格式的文件
f.close()
</code></pre><p>  二维数据的逐一处理：采用二层循环</p><pre><code class=language-python>ls = [[1,2], [3,4], [5,6]]     # 二维列表
for row in ls:
    for column in row:
        print(column)
</code></pre><h3 id=wordcloud-库概述>wordcloud 库概述</h3><p>wordcloud 是优秀的词云展示第三方库</p><p>词云以词语为基本单位，更加直观和艺术地展示文本</p><pre><code class=language-python>pip install wordcloud     # 安装 wordcloud 库
</code></pre><h3 id=wordcloud-库基本使用>wordcloud 库基本使用</h3><p>wordcloud 库把词云当作一个 WordCloud 对象</p><p>wordcloud.WordCloud() 代表一个文本对应的词云</p><p>可以根据文本中词语出现的频率等参数绘制词云</p><p>词云的绘制形状、尺寸和颜色都可以设定</p><h3 id=wordcloud-库常规方法>wordcloud 库常规方法</h3><pre><code class=language-python>w = wordcloud.WordCloud()
</code></pre><p>  以 WordCloud 对象为基础</p><p>  配置参数、加载文本、输出文件</p><h3 id=wordcloud-库常规方法-1>wordcloud 库常规方法</h3><table><thead><tr><th style=text-align:left>方法</th><th style=text-align:left>描述</th><th style=text-align:left>举例</th></tr></thead><tbody><tr><td style=text-align:left>w.generate(txt)</td><td style=text-align:left>向 WordCloud 对象 w 中加载文本 txt</td><td style=text-align:left>w.generate(&ldquo;Python and WordCloud&rdquo;)</td></tr><tr><td style=text-align:left>w.to_file(filename)</td><td style=text-align:left>将词云输出为图像文件，.png 或.jpg 格式</td><td style=text-align:left>w.to_file(&ldquo;outfile.png&rdquo;)</td></tr></tbody></table><pre><code class=language-python>import wordcloud
c = wordcloud.WordCloud()     # 步骤1：配置对象参数
c.generate(&quot;wordcloud by Python&quot;)     # 步骤2：加载词云文本
c.to_file(&quot;pywordcloud.png&quot;)     # 步骤3：输出词云文件
</code></pre><p>文本 → 词云</p><ol><li>分隔: 以空格分隔单词</li><li>统计: 单词出现次数并过滤</li><li>字体: 根据统计配置字号</li><li>布局: 颜色环境尺寸</li></ol><h3 id=配置对象参数>配置对象参数</h3><pre><code class=language-python>w = wordcloud.WordCloud(&lt;参数&gt;)
</code></pre><table><thead><tr><th style=text-align:center>参数</th><th style=text-align:left>描述</th><th style=text-align:left>举例</th></tr></thead><tbody><tr><td style=text-align:center>width</td><td style=text-align:left>指定词云对象生成图片的宽度，默认 400 像素</td><td style=text-align:left>w=wordcloud.WordCloud(width=600)</td></tr><tr><td style=text-align:center>height</td><td style=text-align:left>指定词云对象生成图片的高度，默认 200 像素</td><td style=text-align:left>w=wordcloud.WordCloud(height=400)</td></tr><tr><td style=text-align:center>min_font_size</td><td style=text-align:left>指定词云中字体的最小字号，默认 4 号</td><td style=text-align:left>w=wordcloud.WordCloud(min_font_size=10)</td></tr><tr><td style=text-align:center>max_font_size</td><td style=text-align:left>指定词云中字体的最大字号，根据高度自动调节</td><td style=text-align:left>w=wordcloud.WordCloud(max_font_size=20)</td></tr><tr><td style=text-align:center>font_step</td><td style=text-align:left>指定词云中字体字号的步进间隔，默认为 1</td><td style=text-align:left>w=wordcloud.WordCloud(font_step=2)</td></tr><tr><td style=text-align:center>font_path</td><td style=text-align:left>指定字体文件的路径，默认 None</td><td style=text-align:left>w=wordcloud.WordCloud(font_path=&ldquo;msyh.ttc&rdquo;)</td></tr><tr><td style=text-align:center>max_words</td><td style=text-align:left>指定词云显示的最大单词数量，默认 200</td><td style=text-align:left>w=wordcloud.WordCloud(max_words=20)</td></tr><tr><td style=text-align:center>stop_words</td><td style=text-align:left>指定词云的排除词列表，即不显示的单词列表</td><td style=text-align:left>w=wordcloud.WordCloud(stop_words={&ldquo;Python&rdquo;})</td></tr><tr><td style=text-align:center>mask</td><td style=text-align:left>指定词云形状，默认为长方形，需要引用 imread() 函数</td><td style=text-align:left>&#187;>from scipy.misc import imread &#187;>mk=imread(&ldquo;pic.png&rdquo;) &#187;>w=wordcloud.WordCloud(mask=mk)</td></tr><tr><td style=text-align:center>background_color</td><td style=text-align:left>指定词云图片的背景颜色，默认为黑色</td><td style=text-align:left>w=wordcloud.WordCloud(background_color=&ldquo;white&rdquo;)</td></tr></tbody></table><h2 id=测验-7>测验 7</h2><ol><li><p>以下选项对文件描述错误的是：B</p><p>A. 文件是存储在辅助存储器上的数据序列</p><p>B. 文件是程序的集合和抽象</p><p>C. 文件可以包含任何内容</p><p>D. 文件是数据的集合和抽象</p></li></ol><ul><li>函数或类是程序的集合和抽象，文件不是。</li></ul><ol start=2><li><p>关于文件关闭的 close() 方法，哪个选项的描述是正确的？D</p><p>A. 如果文件是只读方式打开，仅在这种情况下可以不用 close() 方法关闭文件</p><p>B. 文件处理结束之后，一定要用 close() 方法关闭文件</p><p>C. 文件处理遵循严格的“打开-操作-关闭”模式</p><p>D. 文件处理后可以不用 close() 方法关闭文件，程序退出时会默认关闭</p></li></ol><ul><li>打开文件后采用 close() 关闭文件是一个好习惯。如果不调用 close()，当前 Python 程序完全运行退出时，该文件引用被释放，即程序退出时，相当于调用了 close()。</li></ul><ol start=3><li><p>对于 Python 文件，以下描述正确的是：C</p><p>A. 当文件以文本方式打开时，读取按照字节流方式</p><p>B. 根据不同类型的文件，打开方式只能是文本或者二进制中的一种</p><p>C. 同一个文件可以既采用文本方式打开，也可以采用二进制方式打开</p><p>D. 当文件以二进制文件方式打开时，读取按照字符串方式</p></li></ol><ul><li>文件就在那里，二进制或文本方式打开只是对其不同的程序理解。</li></ul><ol start=4><li><p>二维列表 ls=[[1,2,3], [4,5,6],[7,8,9]]，哪个选项能获取其中元素 5？C</p><p>A. ls[4]</p><p>B. ls[-1][-1]</p><p>C. ls[1][1]</p><p>D. ls[-2][-1]</p></li></ol><ul><li>这是二维切片的使用方式。</li></ul><ol start=5><li><p>关于 CSV 文件的描述，哪个选项的描述是错误的？D</p><p>A. CSV 文件格式是一种通用的、相对简单的文件格式，应用于程序之间转移表格数据</p><p>B. 整个 CSV 文件是一个二维数据</p><p>C. CSV 文件的每一行是一维数据，可以使用Python中的列表类型表示</p><p>D. CSV 文件通过多种编码表示字符</p></li></ol><ul><li>一般来说，CSV 文件都是文本文件，由相同编码字符组成。</li></ul><ol start=6><li><p>给定列表 ls = [1, 2, 3, &ldquo;1&rdquo;, &ldquo;2&rdquo;, &ldquo;3&rdquo;]，其元素包含 2 种数据类型，哪个选项是列表 ls 的数据组织维度？A</p><p>A. 一维数据</p><p>B. 高维数据</p><p>C. 二维数据</p><p>D. 多维数据</p></li></ol><ul><li><p>列表元素如果都是列表，其可能表示二维数据，例如：[[1,2], [3,4], [5,6]]。</p></li><li><p>如果列表元素不都是的将列表，则它表示一维数据。</p></li></ul><ol start=7><li><p>以下选项不是 Python 文件读操作的是：C</p><p>A. readline()</p><p>B. read()</p><p>C. readtext()</p><p>D. readlines()</p></li></ol><ul><li>没有 readtext() 方法</li></ul><ol start=8><li><p>关于 Python 文件的 ‘+’ 打开模式，哪个选项的描述是正确的？C</p><p>A. 追加写模式</p><p>B. 只读模式</p><p>C. 与 r/w/a/x 一同使用，在原功能基础上增加同时读写功能</p><p>D. 覆盖写模式</p></li></ol><ul><li>&lsquo;+&rsquo; 打开模式的精髓在于它能够同时赋予文件的读写权限。</li></ul><ol start=9><li><p>关于数据组织的维度，哪个选项的描述是错误的？A</p><p>A. 数据组织存在维度，字典类型用于表示一维和二维数据</p><p>B. 二维数据采用表格方式组织，对应于数学中的矩阵</p><p>C. 高维数据由键值对类型的数据构成，采用对象方式组织</p><p>D. 一维数据采用线性方式组织，对应于数学中的数组和集合等概念</p></li></ol><ul><li>字典用于表示高维数据，一般不用来表示一二维数据。</li></ul><ol start=10><li><p>Python 对文件操作采用的统一步骤是：A</p><p>A. 打开—操作—关闭</p><p>B. 操作—读取—写入</p><p>C. 打开—读取—写入—关闭</p><p>D. 打开—读写—写入</p></li></ol><ul><li>打开—操作—关闭 是一个统一步骤，其中，关闭可以省略。</li></ul></article><div class=my-4><a href=https://b.hui.ke/tags/%E6%96%87%E4%BB%B6/ class="inline-block bg-tertiary-bg text-sm rounded px-3 py-1 my-1 me-2 hover:text-eureka">#文件</a>
<a href=https://b.hui.ke/tags/%E6%95%B0%E6%8D%AE/ class="inline-block bg-tertiary-bg text-sm rounded px-3 py-1 my-1 me-2 hover:text-eureka">#数据</a>
<a href=https://b.hui.ke/tags/wordcloud/ class="inline-block bg-tertiary-bg text-sm rounded px-3 py-1 my-1 me-2 hover:text-eureka">#wordcloud</a></div><div class=py-2><div class="my-8 flex flex-col items-center md:flex-row"><a href=https://b.hui.ke/authors/hui.ke/ class="md:me-4 text-primary-text h-24 w-24"><img src=https://b.hui.ke/bagua.webp class="bg-primary-bg w-full rounded-full" alt=Avatar></a><div class="mt-4 w-full md:mt-0 md:w-auto"><a href=https://b.hui.ke/authors/hui.ke/ class="mb-2 block border-b pb-1 text-lg font-bold"><h3>Hui.Ke</h3></a><span class="block pb-2">❤ Cyber Security | Safety is a priority.</span>
<a href=mailto:3199731997@qq.com class=me-2><i class="fas fa-envelope"></i></a>
<a href="https://wpa.qq.com/msgrd?v=3&uin=3199731997" class=me-2><i class="fab fa-qq"></i></a>
<a href=/images/aixinxianquan.webp class=me-2><i class="fab fa-weixin"></i></a></div></div></div><div class="-mx-2 mt-4 flex flex-col border-t px-2 pt-4 md:flex-row md:justify-between"><div><span class="text-primary-text block font-bold">Previous</span>
<a href=https://b.hui.ke/docs/python/17/ class=block>【第7周程序】文件和数据格式化</a></div><div class="mt-4 md:mt-0 md:text-right"><span class="text-primary-text block font-bold">Next</span>
<a href=https://b.hui.ke/docs/python/16/ class=block>【第6周程序】组合数据类型</a></div></div><div id=valine-comments class=mt-4></div><script defer src=https://cdn.jsdelivr.net/npm/valine@1.4.16/dist/Valine.min.js integrity=sha384-e0+DNUCJo75aOAzHQbFWYBCM9/S4f0BhRJXvEgbE3mMS85RM20MSSGStHuNdY2QK crossorigin></script>
<script>document.addEventListener("DOMContentLoaded",function(){new Valine({el:"#valine-comments",appId:"BQnVqWIiq78AdqwyhvBVAa3y-MdYXbMMI",appKey:"RKg5By312YjM8rU6WkkfK9IN",recordIP:"true",serverURLs:"https://l.hui.ke",visitor:"true"})})</script></div><div class="hidden lg:block lg:w-1/4"><div class="bg-secondary-bg
prose sticky top-16 z-10 hidden px-6 py-4 lg:block"><h3>On This Page</h3></div><div class="sticky-toc
border-s
hidden px-6 pb-6 lg:block"><nav id=TableOfContents><ul><li><a href=#notes>notes</a><ul><li><a href=#文件的理解>文件的理解</a></li><li><a href=#文本文件-vs-二进制文件>文本文件 vs. 二进制文件</a></li><li><a href=#文件的打开关闭>文件的打开关闭</a></li><li><a href=#文件内容的读取>文件内容的读取</a></li><li><a href=#数据的文件写入>数据的文件写入</a></li><li><a href=#数据组织的维度>数据组织的维度</a></li><li><a href=#一维数据的格式化和处理>一维数据的格式化和处理</a></li><li><a href=#二维数据的格式化和处理>二维数据的格式化和处理</a><ul><li><a href=#二维数据的表示>二维数据的表示</a></li><li><a href=#csv-数据存储格式>CSV 数据存储格式</a></li><li><a href=#二维数据的存储>二维数据的存储</a></li><li><a href=#二维数据的处理>二维数据的处理</a></li></ul></li><li><a href=#wordcloud-库概述>wordcloud 库概述</a></li><li><a href=#wordcloud-库基本使用>wordcloud 库基本使用</a></li><li><a href=#wordcloud-库常规方法>wordcloud 库常规方法</a></li><li><a href=#wordcloud-库常规方法-1>wordcloud 库常规方法</a></li><li><a href=#配置对象参数>配置对象参数</a></li></ul></li><li><a href=#测验-7>测验 7</a></li></ul></nav></div><script>window.addEventListener("DOMContentLoaded",()=>{enableStickyToc()})</script></div></div></div></div></div><script>document.addEventListener("DOMContentLoaded",()=>{hljs.highlightAll(),changeSidebarHeight(),switchDocToc()})</script></div></div></main><footer class=pl-scrollbar><div class="mx-auto w-full max-w-screen-xl"><div class="text-center p-6 pin-b"><script async src=/js/click.js></script><div id=poem_ip></div><script type=text/javascript>jinrishici.load(function(e){tags.innerHTML=e.data.matchTags})</script><div><span id=timeDate>载入年天数...</span><span id=times>载入时分秒...</span>
<script async src=/js/duration.js></script></div><a href=https://www.foreverblog.cn/go.html target=_blank><img src=https://img.foreverblog.cn/wormhole_4_tp.gif alt style=display:inline-block;width:auto;height:32px title=穿梭虫洞-随机访问十年之约友链博客></a><p class="text-sm text-tertiary-text"><script async src=//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js></script>本站总访问量 <span id=busuanzi_value_site_pv></span> 次
&#183; 您是本站的第 <span id=busuanzi_value_site_uv></span> 个小伙伴</p><script async src=/js/tab.js></script></div></div></footer></body></html>